package belf.migrate.api.job;

import belf.migrate.api.taskconf.Task;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Job {
    private Long jobId;
    /** Job对应的任务 */
    private Task task;
    /** 所有者 */
    private String owner;
    /** 创建时间 */
    private Date createTime;

    /** job执行的开始时间 */
    private Date startTime;
    /** job执行的结束时间。对于STREAM类型的任务，没有结束时间 */
    private Date endTime;

    /** 需要执行的任务对象名称。如建表任务，包含需要建哪些表；新建视图，需要建哪些视图。<br/>
     * 计划支持的对象包括：表、视图、外键、触发器、自定义类型、函数、存储过程
     * 如果没有定义missions(missions=null) ，则对所有对象进行执行。
     * 在mysql表中，定义为JSON类型存取
     */
    private List<String> missions;

    public Job(Task task, long jobId, Date startTime, Date endTime) {
        this.task = task;
        this.jobId = jobId;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    @Override
    public String toString() {
        return "Job{" +
                "jobId=" + jobId +
                ", task=" + task +
                ", owner='" + owner + '\'' +
                ", createTime=" + createTime +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                ", missions=" + missions +
                '}';
    }
}
/* 建表语句
CREATE TABLE migration_job(
    job_id INT AUTO_INCREMENT PRIMARY KEY,
    task_id INT,
    owner VARCHAR(64),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    start_time TIMESTAMP,
    end_time TIMESTAMP,
    missions JSON
);
 */